<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>用户提交的数据</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="security.globals.html">使用 Register Globals</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="security.magicquotes.html">魔术引号</a></div>
 <div class="up"><a href="security.html">安全</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="security.variables" class="chapter">
   <h1>用户提交的数据</h1>

   <p class="para">
    很多 PHP 程序所存在的重大弱点并不是 PHP
    语言本身的问题，而是编程者的安全意识不高而导致的。因此，必须时时注意每一段代码可能存在的问题，去发现非正确数据提交时可能造成的影响。
    <div class="example" id="example-339">
     <p><strong>Example #1 危险的变量用法</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;从用户目录中删除一个文件，或者……能删除更多的东西？<br /></span><span style="color: #0000BB">unlink&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">$evil_var</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;记录用户的登陆，或者……能否在&nbsp;/etc/passwd&nbsp;添加数据？<br /></span><span style="color: #0000BB">fwrite&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$evil_var</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;执行一些普通的命令，或者……可以执行&nbsp;rm&nbsp;-rf&nbsp;*&nbsp;？<br /></span><span style="color: #0000BB">system&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">$evil_var</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">exec&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">$evil_var</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>
   </p>
   <p class="para">
    必须时常留意你的代码，以确保每一个从客户端提交的变量都经过适当的检查，然后问自己以下一些问题：
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       此脚本是否只能影响所预期的文件？
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       非正常的数据被提交后能否产生作用？
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       此脚本能用于计划外的用途吗？
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       此脚本能否和其它脚本结合起来做坏事？
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       是否所有的事务都被充分记录了？
      </span>
     </li>
    </ul>
    在写代码的时候问自己这些问题，否则以后可能要为了增加安全性而重写代码了。注意了这些问题的话，也许还不完全能保证系统的安全，但是至少可以提高安全性。
   </p>
   <p class="para">
    还可以考虑关闭 register_globals，magic_quotes
    或者其它使编程更方便但会使某个变量的合法性，来源和其值被搞乱的设置。在开发时，可以使用 error_reporting(E_ALL)
    模式帮助检查变量使用前是否有被检查或被初始化，这样就可以防止某些非正常的数据的挠乱了。
   </p>
  </div>
<hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="security.globals.html">使用 Register Globals</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="security.magicquotes.html">魔术引号</a></div>
 <div class="up"><a href="security.html">安全</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
